package com.hsjk.szwj.module.train.service;

import com.hsjk.szwj.framework.common.pojo.PageResult;
import com.hsjk.szwj.module.train.controller.admin.vo.AdminCourseDetailRespVO;
import com.hsjk.szwj.module.train.controller.admin.vo.AdminCoursePageReqVO;
import com.hsjk.szwj.module.train.controller.admin.vo.AdminCoursePageRespVO;
import com.hsjk.szwj.module.train.controller.admin.vo.AdminCreateCourseReqVO;
import com.hsjk.szwj.module.train.controller.admin.vo.AdminMemberCoursePageReqVO;
import com.hsjk.szwj.module.train.controller.admin.vo.AdminMemberCoursePageRespVO;
import com.hsjk.szwj.module.train.controller.admin.vo.AdminPlatformCoursePageReqVO;
import com.hsjk.szwj.module.train.controller.admin.vo.AdminPlatformCoursePageRespVO;
import com.hsjk.szwj.module.train.controller.admin.vo.AdminUpdateCourseReqVO;
import com.hsjk.szwj.module.train.controller.app.vo.course.AppCourseDetailRespVO;
import com.hsjk.szwj.module.train.controller.app.vo.course.AppCourseItemQuestionSetRespVO;
import com.hsjk.szwj.module.train.controller.app.vo.course.AppCourseItemRespVO;
import com.hsjk.szwj.module.train.controller.app.vo.course.AppCourseLiveInfoRespVO;
import com.hsjk.szwj.module.train.controller.app.vo.course.AppCoursePageReqVO;
import com.hsjk.szwj.module.train.controller.app.vo.course.AppCoursePageRespVO;
import com.hsjk.szwj.module.train.controller.app.vo.course.AppCourseWithPriceRespVO;
import com.hsjk.szwj.module.train.dal.dataobject.course.CourseArticleDO;
import com.hsjk.szwj.module.train.dal.dataobject.course.CourseCatalogDO;
import com.hsjk.szwj.module.train.dal.dataobject.course.CourseStudyRecordDO;
import com.hsjk.szwj.module.train.dal.dataobject.course.CourseTagDO;
import com.hsjk.szwj.module.train.dal.dataobject.course.CourseVideoDO;
import com.hsjk.szwj.module.train.dal.dataobject.course.CourseVideoPointDO;

import java.util.List;

/**
 * @author chenjiawei
 * @desc
 * @Date 2023/08/04 00:46
 **/
public interface ICourseService {
    /**
     * 获取课程标签列表
     *
     * @return java.util.List<com.hsjk.szwj.module.train.dal.dataobject.course.CourseTagDO>
     * @author chenjiawei
     * @date 2023/8/4 12:49 上午
     **/
    List<CourseTagDO> getCourseTagList();

    /**
     * 分页获取课程列表
     *
     * @param reqVO
     * @return java.util.List<com.hsjk.szwj.module.train.controller.app.vo.course.AppCourseListByTagRespVO>
     * @author chenjiawei
     * @date 2023/8/4 1:06 上午
     **/
    PageResult<AppCourseWithPriceRespVO> getCoursePage(AppCoursePageReqVO reqVO);

    /**
     * 分页获取已购课程列表
     */
    PageResult<AppCoursePageRespVO> getPurchasedCoursePage(AppCoursePageReqVO reqVO);

    /**
     * 根据课程id获取课程详情
     */
    AppCourseDetailRespVO getCourseDetailById(Long id);

    /**
     * 根据课程id获取课程目录
     *
     * @param courseId
     * @return java.util.List<com.hsjk.szwj.module.train.dal.dataobject.course.CourseCatalogDO>
     * @author chenjiawei
     * @date 2023/8/4 1:09 上午
     **/
    List<CourseCatalogDO> getCourseCatalogListByCourseId(Long courseId);

    /**
     * 根据课程id获取课程条目
     *
     * @param courseId
     * @return java.util.List<com.hsjk.szwj.module.train.dal.dataobject.course.CourseItemDO>
     * @author chenjiawei
     * @date 2023/8/4 1:11 上午
     **/
    List<AppCourseItemRespVO> getCourseItemListByCourseId(Long courseId);

    /**
     * 根据视频id获取课程视频
     *
     * @param id
     * @return java.util.List<com.hsjk.szwj.module.train.dal.dataobject.course.CourseVideoDO>
     * @author chenjiawei
     * @date 2023/8/4 1:12 上午
     **/
    CourseVideoDO getCourseVideoById(Long id);

    /**
     * 根据根据文章id获取课程文章
     *
     * @param id
     * @return java.util.List<com.hsjk.szwj.module.train.dal.dataobject.course.CourseArticleDO>
     * @author chenjiawei
     * @date 2023/8/4 1:13 上午
     **/
    CourseArticleDO getArticleById(Long id);

    /**
     * 根据直播id获取直播信息
     */
    AppCourseLiveInfoRespVO getLiveInfoByLiveId(Long liveId);

    boolean updateStudyRecord(CourseStudyRecordDO studyRecordDO);

    List<CourseVideoPointDO> getVideoPointByVideoId(Long videoId);

    /**
     * 根据视频ID获取播放token
     *
     * @param videoId
     * @return java.lang.String
     * @author chenjiawei
     * @date 2023/9/5 1:52 下午
     **/
    String getPlayerTokenByVideoId(Long videoId);

    /**
     * 获取课程目录下item集合
     *
     * @param courseCatalogId
     * @return java.util.List<java.lang.Object>
     * @author chenjiawei
     * @date 2023/11/2 11:37 PM
     **/
    List<Object> getCatalogItemList(Long courseCatalogId);

    /**
     * 分页获取课程信息
     *
     * @param reqVO
     * @return com.hsjk.szwj.framework.common.pojo.PageResult<com.hsjk.szwj.module.train.controller.admin.vo.AdminCoursePageRespVO>
     * @author chenjiawei
     * @date 2023/9/25 9:52 AM
     **/
    PageResult<AdminCoursePageRespVO> getAdminCoursePage(AdminCoursePageReqVO reqVO);

    /**
     * 分页获取平台课程信息
     *
     * @param reqVO
     * @return com.hsjk.szwj.framework.common.pojo.PageResult<com.hsjk.szwj.module.train.controller.admin.vo.AdminPlatformCoursePageRespVO>
     * @author chenjiawei
     * @date 2023/11/14 9:23 PM
     **/
    PageResult<AdminPlatformCoursePageRespVO> getAdminPlatformCoursePage(AdminPlatformCoursePageReqVO reqVO);

    /**
     * 根据课程id获取课程详情
     *
     * @param id
     * @return com.hsjk.szwj.module.train.controller.admin.vo.AdminCourseDetailRespVO
     * @author chenjiawei
     * @date 2023/9/25 4:05 PM
     **/
    AdminCourseDetailRespVO getAdminCourseDetail(Long id);

    /**
     * 用户课程信息分页
     *
     * @param reqVO
     * @return com.hsjk.szwj.framework.common.pojo.PageResult<com.hsjk.szwj.module.train.controller.admin.vo.AdminMemberCoursePageRespVO>
     * @author chenjiawei
     * @date 2023/9/26 10:03 AM
     **/
    PageResult<AdminMemberCoursePageRespVO> memberCoursePage(AdminMemberCoursePageReqVO reqVO);

    /**
     * 创建课程
     *
     * @param reqVO
     * @return java.lang.Boolean
     * @author chenjiawei
     * @date 2023/10/8 11:01 PM
     **/
    Boolean createCourse(AdminCreateCourseReqVO reqVO);

    /**
     * 更新课程
     *
     * @param reqVO
     * @return java.lang.Boolean
     * @author chenjiawei
     * @date 2023/10/8 11:19 PM
     **/
    Boolean updateCourse(AdminUpdateCourseReqVO reqVO);

    /**
     * 根据题集ID获取课程Item题集类型信息
     *
     * @param questionSetId
     * @param courseItemId
     * @return com.hsjk.szwj.module.train.controller.app.vo.course.AppCourseItemQuestionSetRespVO
     * @author chenjiawei
     * @date 2023/11/3 12:10 AM
     **/
    AppCourseItemQuestionSetRespVO getCourseItemQuestionSetInfo(Long questionSetId, Long courseItemId);

    /**
     * 根据ID删除课程
     *
     * @param id
     * @return java.lang.Boolean
     * @author chenjiawei
     * @date 2023/11/4 11:01 PM
     **/
    Boolean deleteCourse(Long id);
}
